| <<<предыдущая глава | к содержанию | цитированная литература >>> |
Здесь мы рассмотрим лишь небольшую часть графических команд высокого уровня, не затрагивая их базу - графические объекты (Axes, Line, Patch, Surface, Text).
plot (y) - построение графика одномерного массива в зависимости от номера элемента (для двумерного массива строятся графики для столбцов); plot (x,y) - построение графика функции y=y(x); при двумерном х строятся графики х=х(у); если оба массива двумерные, строятся зависимости для соответствующих столбцов; plot (x,y, LineSpec) - заданием строки LineSpec (до 3 символов) определяет стиль линий , форму маркера точек и цвет линий и маркера:
| Символ стиля линии | Цвет | Цвет | ||||||||||||||||||||||||
|
|
|
Маркер может определяться символами :
. + * ° ґ s (квадрат) d (ромб) р (пятиугольник) h(шестиугольник)
v ^ < > (стрелки)
По умолчанию выбирается непрерывная линия с точечным маркером и чередованием цветов с желтого по синий.
plot (x1,y1, LineSpec1, x1,y1, LineSpec2,...) - строит на одном графике несколько линий (диапазон по аргументу - объединение х1 и х2;
plot (...,'PropertyName',PropertyValue,...) -задает значения свойств графического объекта Line (толщину линий LineWidth, размер маркера MarcerSize, цвет маркера MarcerFaceColor и и др.) .
| >> x=0:0.3:6; | ||
| >> y=besselj(0,x); | % функция J0(x) | |
| >> x1=0:0.4:8; | ||
| >> y1=besselj(1,x1); | % функция J1(x) | |
| >> plot(x,y,'-sk', x1,y1,'-pk','LineWidth',1 ) | % рис.9.1 | |
fplot( <имя функции>,limits) строит график функции (функций) в интервале limits=[xmin,xmax]. В качестве имени функции может использоваться М-файл или строка типа 'sin(x)', '[sin(x) cos(x) ]', '[sin(x), myfun1(x), myfun2(x)]'. Можно установить размеры графика по оси значений функции limits=[xmin,xmax ymin ymax].
fplot( <имя функции>,limits, eps) строит график c относительной погрешностью ерs (по умолчанию 0.002) и максимальное число шагов (1/eps)+1. Эту конструкцию можно дополнить четвертым параметром n (n+1 - минимальное число точек) и параметром LineSpec:
>>fplot( '[besselj(0,x) besselj(1,x) 0]',[0 10],[],20) & рис.9.2.
ezplot('f(x)') строит график f(x), заданной символьным выражением (например, ezplot('x^2-2*x+1') ), на интервале [-2p 2p] с выводом выражения в качестве заголовка графика.
ezplot('f(x)', limits) и ezplot('f(x)', limits, fig) строят график f(x) на указанном интервале и в заданном окне.
![]() Рис.9.1. | ![]() Рис.9.2. |
График в полярных координатах определяется функциями polar(f,r) и polar(f,r, LineSpec), где f - массив значений угла и r - соответствующие значения радиуса : x=rЧcos(j), y=rЧsin(j):
| >> f=0:0.01:2*pi; | >> f=0:0.01:12*pi; |
| >> r=sin(2.*f).*cos(2.*f); | >> r=exp(-0.1*f); |
| >> hp=polar(f,r),hold on | >> hp=polar(f,r) ,hold on |
| >> set(hp,'LineWidth',4) % рис.9.3 | >> set(hp,'LineWidth',2) % рис.9.4 |
Рис.9.3. | ![]() Рис.9.4. |
График в логарифмическом масштабе задается функцией loglog c тем же набором параметров, что и plot, с той лишь разницей, что проводится масштабирование десятичным логарифмированием по обеим координатам.
График в полулогарифмическом масштабе задается функциями semilogx и semilogy c тем же набором параметров, что и plot (проводится масштабирование логарифмированием по одной из координат).
График с двумя осями ординат (одна отображается слева, другая справа) реализуется функцией plotyy(x1,y1,x2,y2) и той же функцией с добавлением параметров масштабирования 'f1' или 'f1','f2', в роли которых могут выступать plot, semilogx, semilogx, loglog:
>> x=0:0.01:12*pi;
>> plotyy(x,sin(x).*exp(-0.1.*x),x, 10*exp(-0.1.*x)) % Рис.9.5
В трехмерной графике выполняются представления функции z=z(x,y), отличающиеся способом соединения точек: линия, сечения, сетчатая или сплошная поверхность.
plot3(x,y,z) в тех же вариациях, что и plot, предполагает задание одномерных и двумерных массивов (строятся точки с координатами x(i,:),y(i,:),z(i,:) для каждого столбца и соединяются прямыми линиями. Если используется [x,y]=meshgrid(...), то строятся сечения.
| >> t=0:pi/50:10*pi; | >> [x,y]=meshgrid([-2:0.1:2],[-2:0.01:2]); |
| >> plot3(sin(t),cos(t),t) %Рис.9.6 | >> z=exp(-x.^2-y.^2); |
| >> plot3(x,y,z) %Рис.9.7 | |
Рис.9.6. | ![]() Рис.9.7. |
mesh(x,y,z,c), mesh(z,c), mesh(z) определяют задание сетчатой поверхности (массив с определяет цвета узлов поверхности; если x,y не ука-заны, то x=1:n, y=1:m, где [m,n]=size(z).
| >> [x,y]=meshgrid(-8:0.5:8); | Аналогичная функция meshс в дополнение к поверхности строит проекции линий уровня, а meshz делает срез поверхности до нулевого уровня (своеобразный пьедестал). |
| >> t=sqrt(x.^2+y.^2)+0.001; | |
| >> z=sin(t)./t; | |
| >> mesh(x,y,z) % Рис.9.8 | |
![]() Рис.9.8. | |
| >> meshc(x,y,z) %Рис.9.9 | >> meshz(x,y,z) %Рис.9.10 |
Рис.9.9. | ![]() Рис.9.10. |
surf(x,y,z,c), surf(z,c), surf(z) определяют задание сплошной поверхности, отличаясь от mesh системой окраски; аналогичная функция surfс(...) задает проекции линий уровня.
Реализация трехмерной графики может сопровождаться множеством вспомогательных команд, например:
hidden on/off включает или выключает режим удаления невидимых линий (по умолчанию on);
shading faceted / flat / interp устанавливает затенение поверхностей (по умолчанию faceted дает равномерную окраску ячеек с черными гранями, flat - цветами узлов сетки, interp - интерполяцией цветов.
Создание графического объекта исходит автоматически при обращении к командам, порождающим объекты Line и Surface, но может выполняться и командой axec('<имя свойства>',<значение>, ...). Есть и команды более высокого уровня:
axis([xmin xmax ymin ymax]), axis([xmin xmax ymin ymax zmin zmax]) устанавливает масштаб по осям;
axes off/on выключает (включает) вывод на координатные оси обозначений и маркеров;
grid on/off, grid включает (выключает) или переключает режим нанесения координатной сетки на осях;
box on/off, box включает (выключает) или переключает режим рисования контура параллелепипеда, трехмерный объект;
zoom on/off включает (выключает) режим интерактивного масштабирования графиков (левая мышь около точки увеличивает масштаб вдвое, правая - уменьшает; удержанием левой мыши можно выделить прямоугольную область для детального просмотра; zoom out восстанавливает исходный график.
В отличие от meshс (...) и surfс(...) функция contour рисует только линии уровня соответствующих поверхностей и выступает в многообразии синтаксических форм: contour(X,Y,Z) - для массива Z =Z(X,Y), contour(X,Y,Z,n) - то же с указанием числа линий уровня (по умолчанию 10), contour(X,Y,Z,v) - то же для массива указанных значений ; contour(Z), contour(Z,n), contour(Z,v) - аналогичные функции без указания диапазонов для аргументов и contour(...,LineSpec) - аналогичные функции c указанием типа и цвета линий (см. plot); [C,h]=contour (...) возвращает массив С и вектор дескрипторов, позволяя тем самым продолжить работу с рисунком (давать оцифровку линий, заголовки и др.).
Функция contourf(...) закрашивает области между линиями уровня, аналогична contourf(...) с разницей в формате[C,h, cf]=contour (...), где cf определяет матрицу раскраски.
| >> [x,y]=meshgrid(-8:0.5:8); | >> [x,y]=meshgrid(-2:0.25:2); |
| >> t=sqrt(x.^2+y.^2)+0.001; | >> t=sqrt(x.^2+y.^2)+0.001; |
| >> z=sin(t).^3./t; | >> z=sin(t).^3./t; |
| >> [c,h]=contour(x,y,z,20); | >> [c,h,cf]=contourf(x,y,z,4); |
![]() Рис.9.11 | ![]() Рис.9.12 |
![]() Рис.9.13 | Функция contour3(...) по синтаксису полностью аналогична contour(...), но изображает не проекции линий уровня, а рисует их в пространственной интерпретации; так команда [c,h]=contour3(x,y,z,20); дает фигуру (рис.9.13). |
Создание нового графического окна figure ; командой figure(n) можно выбирать некоторое из созданных окон в качестве текущего.
Включение (выключение) режима сохранения текущего графика :
hold on/off, hold .
Вывод заголовков для графиков (в текущем окне):
title('текст'), title(<имя функции-строки>'), title(..., 'Property-Name','PropertyValue',...), h=title(...).
| Вывод графиков в нескольких окнах рисунка: subplot(m,n,k), subplot(mnk) - m - число окон по горизонтали, n - по вертикали, k - номер окна: | ![]() Рис.9.14 |
| >>subplot(121) >> plot([1:0.3:4]) >> subplot(122) >> plot([4:-0.3:1]) >> title ('y=4-0.3(x-1)') |
Вывод текста для обозначения координатной оси : xlabel(...), ylabel(...), zlabel(...) - синтаксис аналогичен title(...).
Вывод текста в указанной позиции графика: text(x,y,'текст'), text(x,y,z,'текст'), text(...'PropertyName','PropertyValue',...), h=text(...).) - x,y,z -координаты начала текста.
Вывод текста под управлением мыши: gtext('текст'), h= gtext('текст') - выведенный текст можно перемещать мышью.
Вывод легенды legend('текст1','текст2',...), legend(M), legend(h,M), legend off, legend(...,pos), h= legend(...) - здесь М - строковый массив (длина строк одинакова), off удаляет пояснения к графику, pos определяет позицию легенды ( -1 - справа от графика, 0 - в одном из 4 углов с минимумом потерь точек графика, 1-4 - в указанном углу, [x y] - в указанном месте); можно перетаскивать легенду мышью.
>> subplot(111)
>> t=[0:pi/30:2*pi];
>> a=sin(t); b=cos(t);
>> x=0:60;
>> plot(x,a+b),hold on
>> hp=plot(x,a', 'g', x,b','r'); set(hp,'LineWidth',2)
>> legend('a+b','a=sin(t)','b=cos(t)')
>> title('y=sin(t)+cos(t)','FontSize',12,'FontWeight','bold')

Рис.9.15
Маркировка линий уровня, создаваемых функциями contour, contour3, contourf : clabel(C,h), clabel(C,h,v), clabel(C,h,'manual'), clabel(C), clabel(C,v), clabel(C,'manual') - при наличии h маркировка на линиях, при наличии 'manual' - принудительная маркировка нажатием левой мыши или пробела (правая мышь или Return завершает маркировку).
Раздел специальной графики включает команды для построения диаграмм, гистограмм и прочих дискретных графиков.
Столбцовые диаграммы реализуются функциями bar и barh: bar(y), bar(x,y) , h=bar(...) - здесь y -массив (одно- или двумерный), x - одномерный, упорядоченный по возрастанию массив (число смежных по горизонтали столбцов диаграммы равно числу столбцов массива у); можно указать параметры относительной ширины столбцов (1 - касание, >1 - перекрытие, < 1 - c промежутками), или стиля ('group','stack') :
| >> x=0:0.1:6; | >> x=0:0.1:6; |
| >> y1=sin(x); y2=cos(x); y3=exp(-x./2); | >> y1=sin(x); y2=cos(x); y3=exp(-x./2); |
| >> y=[y1;y2;y3]; | >> y=[y1;y2;y3]; |
| >> bar(x,y') | >> bar(x,y','stack') |
![]() Рис.9.16 | ![]() Рис.9.17 |
barh(...) отличается лишь размещением столбцов не по вертикали, а по горизонтали.
Секторная диаграмма реализуется функцией pie(x), pi(x,v), h=pie(...) - здесь v - вектор из 0 и 1 для отделения от диаграммы отдельных секторов:
| >> x=[ 1 4 0.5 5.5 2]; >> pie(x,[0 1 0 0 0]) % Рис.9.18 | |
![]() Рис.9.18 | ![]() Рис.9.19 |
Построение гистограммы hist(y), hist(y,x), hist(y,n), [p,x]=hist(y,...) реализует подсчет числа элементов по столбцам массива у в n (по умолчанию 10) интервалах:
>> x=-3:0.1:3;
>> t=randn(500,1);
>> hist(t,x) % Рис.9.19
Дискретный график stem(y), stem(x,y), stem(...,'fill'), stem(...,LineSpec), h=stem(...) аналогичен столбцовой диаграмме и выводит значения в виде отрезков с маркером ('fill' -закраска маркера):
>> x=-3:0.1:3;
>> f=exp(-x.^2/2);
>> stem(x,f) %Рис.9.20
![]() Рис.9.20 | ![]() Рис.9.21 |
Вывод поля точек выполняется функцией scatter(x,y,...) с возможностью указывать размер, цвет и заполненность маркера:
>> x=-3:0.1:3;
>> f=exp(-x.^2/2);
>> scatter(x,f,'filled') % Рис.9.21
Cреди многообразия функций специальной графики существенный интерес представляют функции поворота графического объекта rotate : например,
| >> h=surf(...); | |
| >> rotate (h,[1 0 0 ],90) | & поворот по оси х на 90° |
| <<<предыдущая глава |